import WxRequest from 'mina-request'
import { env } from './env'
// 使用示例
// instance.request(config)
// instance.get(url, data, config)
// instance.delete(url, data, config)
// instance.post(url, data, config)
// instance.put(url, data, config)
// instance.all(...promise) // 传入一个个 Promise 即可
// instance.upload(url, filePath, name, config) // 将本地资源上传到服务器

// 对 WxRequest 进行实例化
const instance = new WxRequest({
  baseURL: env.baseURL,
  timeout: 15000,
  isLoading: false // 不使用默认 loading
})

// 添加请求拦截器
instance.interceptors.request = (config) => {
  // 在请求发送之前做点什么……

  // 新增请求头
  try {
    var token = wx.getStorageSync('token')
  } catch (e) {

  }

  if (token) {
    config.header['token'] = token
  }

  return config
}

// 添加响应拦截器
instance.interceptors.response = async (response) => {
  // 对响应数据做点什么
  // 从 response 中解构 isSuccess
  const { isSuccess, data } = response
  // 如果 isSuccess 为 false，说明执行了 fail 回调函数
  // 这时候就说明网络异常，需要给用户提示网络异常
  if (!isSuccess) {
    wx.toast({
      title: '网络异常，请稍后重试 !'
    })

    return response
  }

  // 对业务状态码进行
  // 判断服务器响应的业务状态码
  switch (data.code) {
    // 如果后端返回的业务状态码等于 200，说请求成功，服务器成功响应了数据
    case 200:
      // 对服务器响应数据做点什么……
      return data

    // 如果返回的业务状态码等于 208，说明 没有 token，或者 token 失效
    // 就需要让用户登录或者重新登录
    case 208:
      const res = await wx.modal({
        content: '鉴权失败，请重新登录',
        showCancel: false // 不显示取消按钮
      })

      if (res) {
        // 清除之前失效的 token ，同时要清除本地存储的全部信息
        wx.clearStorage()
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }

      return Promise.reject(response)

    default:
      wx.toast({
        title: '程序出现异常，请联系客服或稍后重试'
      })
      return Promise.reject(response)
  }
}
export default instance